package netty

import com.alibaba.fastjson.JSON
import io.netty.buffer.ByteBuf
import io.netty.channel.ChannelHandlerContext
import io.netty.handler.codec.MessageToByteEncoder

/*
 * @author uv
 * @date 2018/10/13 18:09
 * 编码器（将实体类转换成可传输的数据）
 */
object RpcEncoder  //目标对象类型进行编码
// private Class<?> target;
    : MessageToByteEncoder<Any?>() {
    @Throws(Exception::class)
    override fun encode(ctx: ChannelHandlerContext, msg: Any?, out: ByteBuf) {
        println("encode 客户端发送数据:${msg.toString()}")
        val data = JSON.toJSONBytes(msg.toString()) //使用fastJson将对象转换为byte
        out.writeInt(data.size) //先将消息长度写入，也就是消息头
        out.writeBytes(data) //消息体中包含我们要发送的数据
    }
}
